Graphic capabilities are now common in a variety of applications for personal computers, including three-dimensional (3D) games, multimedia communications and computer-aided design applications (CAD), which perform many graphic functions, including 3D animation, sophisticated shading algorithms, transparency and alpha-blending, live video windows, stereo 3D windows, etc. To perform the desired graphic functions, the computer system must be capable of performing more sophisticated functions in less time. This is particularly true for graphics animation. The computer system must be able to draw complicated geographical figures and fill them while performing complicated 2D and 3D functions, such as patterning, depth cueing, color compare, alpha blending, accumulation, texture assisting, anti-aliasing, super-sampling, color masking, stenciling, panning and zooming, as well as depth and color interpolation, among other functions. The computer system must also draw the geographical figures at a much greater speed while manipulating the pixel data being refreshed to the display monitor.
The architecture of the personal computer system has advanced to handle many sophisticated graphic capabilities required by modern software applications. In more complicated architectures and for more sophisticated applications, a separate graphics processor or accelerator was provided to relieve the primary central processing unit (CPU), so that the CPU could perform other functions and operations. In some systems, the CPU executed an application program and generated programs or instructions for execution by a graphics coprocessor. For 3D capabilities, particularly animation, the cooperation between the CPU and the graphics coprocessor became more critical for determining the quality and speed of the animation. In many designs, the cooperation was not entirely efficient, so that the display became jerky or non-uniform, which was noticeable and distracting to the user. For example, the CPU was often used to monitor the operation of the graphics coprocessor via registers or memory addresses or the like, particularly with respect to status of frames being displayed and program portions being rendered in a frame buffer. In particular, the CPU typically polled one or more status registers to determine when one frame was completed to determine when to switch buffers during 3D operations. Such polling consumed valuable CPU time and reduced 3D performance.
It is therefore desirable to provide a graphics system to perform high level graphics functions and to achieve faster graphic data transfer without significantly depreciating the performance of the computer system. It is particularly desirable to provide improved cooperation between the CPU and a graphics coprocessor to improve 3D animation.